package main

import "fmt"

// 匿名函数  就是没有名字的函数
func main() {
	//f1(f2(1, 2))
	//ret := adder()
	//ret2 := ret(200)
	//fmt.Println(ret2)
	ret := f3(f2, 100, 200)
	f1(ret)
}

// 闭包等于函数+外部变量的引入
func adder() func(int) int {
	var x int = 100
	return func(y int) int {
		x += y
		return x
	}
}

func f1(f func()) {
	f()
}
func f2(x int, y int) {
	fmt.Println(x + y)
}

func f3(f func(int, int), x, y, int) func() {
	tmp := func() {
		f(x, y)
	}
	return tmp
}

// 定义一个函数对f2包装
//
//func f3(f func(int int)) func() {
//	tmp := func() {
//		f()
//	}
//	return tmp
//}
